/*
 * Created on 2008-3-15
 *
 * TODO
 */
package jacky.lanlan.song.extension.struts.resource;

import jacky.lanlan.song.extension.struts.interceptor.UploadInterceptor;
import jacky.lanlan.song.io.FileUtils;
import jacky.lanlan.song.io.IOUtils;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.struts.upload.FormFile;

/**
 * 持久化上载资源到磁盘的策略。子类只需提供保存路径和命名策略即可。
 * 
 * @author Jacky.Song
 */
public abstract class DiskPersistence implements ResourcePersistence {

	private static final Logger logger = Logger.getLogger(UploadInterceptor.class);
	
	public void persistence(List<FormFile> uploadFiles) {
		for (FormFile formFile : uploadFiles) {
			String [] fullName=formFile.getFileName().split("\\.");
			byte[] fileContent=null;
			try {
				fileContent = IOUtils.toByteArray(formFile.getInputStream());
			}
			catch (FileNotFoundException e) {
				logger.error("文件 [" + formFile.getFileName() + "] 未找到", e);
			}
			catch (IOException e) {
				logger.error("上载文件[" + formFile.getFileName() + "] 失败", e);
			}
			// 保存上载文件到磁盘
			FileUtils.writeDataToDisk(fileContent, getPath(), getName(fullName[0]), fullName[1]);
		}
	}
	
	/**
	 * 保存上载资源的路径。
	 */
	protected abstract String getPath();
	
	/**
	 * 上载资源保存的文件名
	 * 
	 * @param origName
	 *          上载资源原名称
	 */
	protected abstract String getName(String origName);
	
}
